#!/usr/bin/env bash

# 设置默认服务列表和端口映射
SERVICES=("user" "order" "api")
PORTS=(8001 8002 8888)
RPC_FLAGS=("--use-rpc" "--use-rpc" "--no-rpc")

SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
PROJECT_ROOT=$(dirname "$(dirname "$SCRIPT_DIR")")
echo "脚本所在目录：$SCRIPT_DIR"
echo "上上级目录（PROJECT_ROOT）：$PROJECT_ROOT"

# 查找服务索引
function get_service_index {
    local service=$1
    for i in "${!SERVICES[@]}"; do
        if [[ "${SERVICES[$i]}" == "$service" ]]; then
            echo $i
            return 0
        fi
    done
    return 1
}

# 部署单个服务
function deploy_service {
    local service=$1
    local index=$(get_service_index "$service")

    if [[ $? -ne 0 ]]; then
        echo -e "${RED}错误: 未知服务 '$service'${NC}"
        return 1
    fi

    local port=${PORTS[$index]}
    local rpc_flag=${RPC_FLAGS[$index]}

    echo -e "${YELLOW}部署服务: ${service} (端口: ${port}, RPC标志: ${rpc_flag})${NC}"

    # 停止并移除现有容器
    if docker ps -a | grep -q "${service}"; then
        echo -e "${YELLOW}移除现有容器: ${service}${NC}"
        if ! docker rm -f "${service}" 2>/dev/null; then
            echo -e "${RED}错误: 无法移除容器 ${service}${NC}"
            return 1
        fi
    fi

    # 构建服务
    echo -e "${YELLOW}构建服务: ${service}${NC}"
    if ! bash $PROJECT_ROOT/deploy/scripts/service-dynamic-ip.sh "${service}" "${rpc_flag}"; then
        echo -e "${RED}错误: 服务 ${service} 构建失败${NC}"
        return 1
    fi

    # 启动新容器
    echo -e "${YELLOW}启动容器: ${service}${NC}"
    if ! docker run -itd -p "${port}:${port}" --name="${service}" "${service}:latest"; then
        echo -e "${RED}错误: 无法启动容器 ${service}${NC}"
        return 1
    fi

    echo -e "${GREEN}服务 ${service} 部署成功！${NC}"
    return 0
}

# 主函数
function main {
    # 处理命令行参数
    local selected_services=()
    if [[ $# -gt 0 ]]; then
        IFS=',' read -r -a selected_services <<< "$1"
    else
        selected_services=("${SERVICES[@]}")
    fi

    # 确保至少有一个服务
    if [[ ${#selected_services[@]} -eq 0 ]]; then
        echo -e "${RED}错误: 服务列表不能为空${NC}"
        exit 1
    fi

    # 部署服务
    local success=true
    for service in "${selected_services[@]}"; do
        if ! deploy_service "$service"; then
            success=false
        fi
        echo "---"
    done

    if [[ "$success" = true ]]; then
        echo -e "${GREEN}所有服务部署成功！${NC}"
        exit 0
    else
        echo -e "${RED}部分服务部署失败！${NC}"
        exit 1
    fi
}

# 执行主函数
main "$@"

# 部署所有默认服务
# ./deploy.sh -d

# 仅部署user服务，使用默认配置
# ./deploy.sh user

# 部署user服务，指定端口，使用默认RPC设置
# ./deploy.sh user:8080

# 部署user服务，使用默认端口，禁用RPC
# ./deploy.sh user::false

# 部署非默认服务，必须指定完整配置
# ./deploy.sh payment:8003:true

# 混合部署默认服务和自定义服务
# ./deploy.sh -d payment:8003:true

# 仅测试服务，不启动
# ./deploy.sh -t user

# 仅启动服务，不测试
# ./deploy.sh -s user